class Solution {
    public List<Integer> largestValues(TreeNode root) {
        List<Integer> ret=new ArrayList<>();
        if(root==null) return ret;
        Queue<TreeNode> q=new LinkedList();
        q.add(root);
        while(!q.isEmpty()){
            int tmp=Integer.MIN_VALUE;
            int sz=q.size();
            for(int i=0;i<sz;i++){
                TreeNode t=q.poll();
                tmp=Math.max(tmp,t.val);
                if(t.left!=null){
                    q.add(t.left);
                }
                if(t.right!=null){
                    q.add(t.right);
                }
            }
            ret.add(tmp);
        }
        return ret;
    }
}